package com.itrencai.d8_stream;

import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;

public class StreamAPI {
    public static void main(String[] args) {
        List<String> names=new ArrayList<>();
        Collections.addAll(names,"张三丰","张无忌","赵敏","周芷若","张强","张三丰");
        //filter:过滤元素
        names.stream().filter(s->s.startsWith("张")).forEach(s-> System.out.println(s));
        long size=names.stream().filter(s->s.length()==3).count();
        System.out.println(size);

        //limit：取前几个元素
        //names.stream().filter(s->s.startsWith("张")).limit(2).forEach(s-> System.out.println(s));
        names.stream().filter(s->s.startsWith("张")).limit(2).forEach( System.out::println);//指的是方法引用

        //skip:跳过前几个
        names.stream().filter(s->s.startsWith("张")).skip(2).forEach( System.out::println);

        //Map加工方法 第一个参数是原材料->第二个参数是加工后的结果
        //给集合元素的前面都加上一个：武艺高强的
        names.stream().map(s->"武艺高强的"+s).forEach(System.out::println);
        //把所有的名称都加工成一个学生对象
        //names.stream().map(s->new Student(s)).forEach(s-> System.out.println(s));
        names.stream().map(Student::new).forEach(System.out::println);//构造器引用，方法引用

        //合并流 Stream.concat,distinct可以去重复
        Stream<String> s1=names.stream().filter(s->s.startsWith("张"));
        Stream<String> s2=Stream.of("java1","java2");
        Stream<String> s3=Stream.concat(s1,s2);
        s3.distinct().forEach(System.out::println);





    }
}
